# %%
import os
import requests
import json
from dotenv import load_dotenv, find_dotenv

# _ = load_dotenv(find_dotenv())  # 读取并加载环境变量(API KEY)，来自 .env 文件
API_KEY = "jxFQ4isXn7gipfUZYXL62qGa"
SECRET_KEY = "xV3vcp4mbH6Hq7qxtBH5mP3M29gEbbPJ"

# def get_access_token():
#     """
#     使用 API Key，Secret Key 获取access_token，替换下列示例中的应用API Key、应用Secret Key
#     """
#     # 指定网址
#     # url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={os.environ['QIANFAN_ACCESS_KEY']}&client_secret={os.environ['QIANFAN_SECRET_KEY']}"
#     url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie_speed?access_token=" + get_access_token()
#     # 设置 POST 访问
#     payload = json.dumps("")
#     headers = {
#         'Content-Type': 'application/json',
#         'Accept': 'application/json'
#     }
#     # 通过 POST 访问获取账户对应的 access_token
#     response = requests.request("POST", url, headers=headers, data=payload)
#     return response.json().get("access_token")

def get_access_token():
    """
    使用 AK，SK 生成鉴权签名（Access Token）
    :return: access_token，或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))


class Chat:
    def __init__(self, access_token,conversation_list=[]) -> None:
        self.conversation_list = []
        self.access_token = access_token
        self.temperature = 0.1

    def show_conversation(self, msg_list):
        for msg in msg_list:
            if msg['role'] == 'user':
                print(f"\U0001f47b: {msg['content']}\n")
            else:
                print(f"\U0001f47D: {msg['content']}\n")

    def ask(self, prompt):
        self.conversation_list.append({"role":"user","content":prompt})
        url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={self.access_token}"
        # 配置 POST 参数
        payload = json.dumps({
            "messages":
            self.conversation_list,
            "temperature": self.temperature
        })
        headers = {
            'Content-Type': 'application/json'
        }
        # 发起请求
        response = requests.request("POST", url, headers=headers, data=payload)
        js = json.loads(response.text)
        answer = js["result"]
        # 下面这一步是把chatGPT的回答也添加到对话列表中，这样下一次问问题的时候就能形成上下文了
        self.conversation_list.append({"role":"assistant","content":answer})
        # self.show_conversation(self.conversation_list)
        return answer
# %%
if __name__ == '__main__':
    # %%
    c = Chat(get_access_token())
    # %%
    c.ask('早上好我们朋友')
    # %%
    c.ask('请问我刚刚和你说了什么？')
    # %%
    c.ask('我想请你当我的虚拟男友？')
    # %%
    c.ask('我想买一个手镯？')
    # %%
    c.ask('当然是金手镯')
    # %%
    c.ask('不不不，我最讨厌别人跟我提保值这两个字了')
    # %%
    c.ask('你作为我的男朋友，语气十分不好，我不喜欢这样的语气')
    # %%
    c.ask('你作为我的男朋友，我要购买金手镯，你是否应该表示表示呢？')
    # %%
    c.ask('你觉得周大福的金手镯怎么样呢？')
    # %%
    c.ask('你为什么又跟我提保值这两个字！我很不喜欢！')
    # %%
    c.ask('那你觉得周六福的金手镯怎么样呢')
    # %%
    c.ask('身为我的男朋友，你说话不应该这么专业，这么像一个“ai”，而是应该更像一个人')
    # %%
    c.ask('那就你个人而言，你会更喜欢带花纹的手镯还是朴素而光滑的手镯呢？')
    # %%
    c.ask('可是，带花纹的手镯会不会又显得没那么有光泽呢？')